#!/bin/sh
#Configuracao --------------------------------------------------------------------------------------------

versao="TF 1.05"
data="`date +%y`.`date +%m`.`date +%d`.`date +%H`.`date +%M`.`date +%S`"
back="/backup"

#Testes
min=0
max=100
entrada="in"
saida="res"
prefixo="arq"
pasta="/testes" # ".$pasta/aquivo"

#Compilacao
numcod=3
arq[0]="principal"
arq[1]="comandos"
arq[2]="imagem"
#arq[3]="comandos"
comp_tag="-std=c99 -pedantic -Wall -ggdb -g"
arq_tipo=".c"
arq_obj=".o"
exe="principal"
#---------------------------------------------------------------------------------------------------------
##########################################################################################################
##########################################################################################################
##########################################################################################################
testes(){
	count=$1
	ultimo=`expr $2 + 1`
	while [ $count != $ultimo ];do
		comp=".$pasta/$prefixo$count.$entrada";
		if [ -e $comp ]; then
			echo
			echo '********************************************************************************'
			echo "***  Teste $count          **********************************************************"
			echo '********************************************************************************'
			./$exe <.$pasta/$prefixo$count.$entrada
			echo 
			fi 
			count=`expr $count + 1`
		done
}
##########################################################################################################
##########################################################################################################
##########################################################################################################
diferencial(){ # primeiro=1 ultimo=2 y=3
	corretos=0
	count=$1
	ultimo=`expr $2 + 1`
	while [ $count != $ultimo ];do
		comp=".$pasta/$prefixo$count.$entrada";
		if [ -e $comp ]; then
			echo
			echo '********************************************************************************'
			echo "***  Teste $count          **********************************************************"
			echo '********************************************************************************'
			./$exe <.$pasta/$prefixo$count.$entrada >./saida.s
			return=$?
			if [ $return != 0 ];then 
				echo Nao Retornou 0
			else
				diff $3 ./saida.s .$pasta/$prefixo$count.$saida
				return=$?
				if [ $return = 0 ];then 
					echo Teste Correto
					corretos=`expr $corretos + 1`
				else
					echo Teste ERRADO
				fi
			fi
		else
			corretos=`expr $corretos + 1`
		fi
		count=`expr $count + 1`
	done
	if [ $corretos = `expr $ultimo - $1` ];then
	echo -e '
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@   Todos Testes Executados Certos    @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
		noback;
	else
	echo -e '
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!   Pograma com Erro    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!'
	fi
}
##########################################################################################################
##########################################################################################################
##########################################################################################################
compila(){
echo  
echo -e '################################################################################
###   Compilacao                ################################################
################################################################################'
		if [ -e "./$exe" ];then
			rm $exe
		fi
		count=0
		erro=0
		while [ $count != $numcod ]; do
			obt="./${arq[$count]}$arq_obj"
			if [ -e $obt ];then
			rm $obt
			fi
			gcc ${arq[$count]}$arq_tipo -c
			objs="$objs $obt"
			count=`expr $count + 1`
			if [ ! -e $obt ];then
			erro=1
			fi
		done
		if [ $erro = 1 ];then
			echo Compilacao ERRADA
			return 0
		else
			gcc $comp_tag $objs -o $exe
			if [ -e "./$exe" ];then
				echo Compilacao Correta
				return 1
			else
				echo Compilacao ERRADA
				return 0
			fi
		fi
	return 0
}
##########################################################################################################
##########################################################################################################
##########################################################################################################
comtest(){
	compila
	comp=$?;
	if [ $comp = 1 ];then
		if [ $1 = 1 ];then
			diferencial $2 $3
		elif [ $1 = 2 ];then
			diferencial $2 $3 "-y"
		elif [ $1 = 3 ];then
			diferencial $2 $3 "-q"
		elif [ $1 = 0 ];then
			testes $2 $3
		fi
	fi
}
texto () { 
echo "Versao do Barbie:$versao Data:$data Parametros:$1 $2 $3"
echo -e '@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@   Barbie  Iniciado         @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@'
primeiro=$min
ultimo=$max
if [ ! -z $2 ];then
		primeiro=$2
		if [ ! -z $3 ];then
			ultimo=$3
		else
			ultimo=$2
		fi
	fi
if [ -z $1 ];then
	tipo="dif"
else
	tipo=$1
fi
case $tipo in
	dif) comtest 1 $primeiro $ultimo;;
	cmp) comtest 2 $primeiro $ultimo;;
	com) compila;;
	exe) comtest 0 $primeiro $ultimo;;
	tst) comtest 3 $primeiro $ultimo;;
esac
echo  
echo -e 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXX   Barbie Finalizado!       XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'
}
##########################################################################################################
##########################################################################################################
##########################################################################################################
grafico () {
kdialog --title "Aviso" --center --stdout --msgbox \
"Bem Vindo ao Barbie\
\n Modo Grafico esta Incompleto\
\n Ele Criara o Resultado.txt" \
0 0
prog=$1
if [ -z $1 ]; then
kdialog --title "Nome do Arquivo Fonte" --center --stdout --inputbox \
"Favor digite o nome do arquivo fonte:" \
0 0
prog=$?
fi
texto $prog;
echo $source
}
##########################################################################################################
##########################################################################################################
##########################################################################################################
noback(){
	if [ -e .$back ];then
		rm -r .$back
	fi
}
##########################################################################################################
##########################################################################################################
##########################################################################################################
backup(){
	if [ ! -e .$back ];then
		mkdir .$back
	fi
	count=0
	while [ $count != $numcod ]; do
		cp ${arq[$count]}$arq_tipo .$back/$data.${arq[$count]}$arq_tipo
		count=`expr $count + 1`
	done
	cp ./resultado.barbie .$back/$data.resultado.barbie
}
##########################################################################################################
##########################################################################################################
##########################################################################################################
# ============================== MAIN =======================================
#./testes.bbe #Programa de Impressao do comprovante de teste
#$ barbie [configuracao] [primeiro teste] [ultimo teste]
if [ -z $1 ]; then
   texto $1 $2 $3 >resultado.barbie
   cat resultado.barbie
   backup
elif [ $1 = "help" ]; then
   cat Leia
elif [ $1 = "noback" ]; then
   noback
elif [ $1 = "grafico" ]; then
   grafico
else
   texto $1 $2 $3 >resultado.barbie
   cat resultado.barbie
   backup
fi